package visual.texto;

import java.util.List;

import negocios.FacadeNegocios;
import negocios.Relacionamento;
import negocios.Usuario;
import negocios.excecoes.LocalizacaoException;
import negocios.excecoes.NaoEncontradoException;
import negocios.excecoes.OcultoException;
import negocios.excecoes.SessaoInexistenteException;

/**
 * Classe que implementa um Menu de texto com o usuario, para manipulacao dos
 * amigos. Esse menu devera oferecer opcoes como, excluir amigo, ocultar
 * localidade do amigo, compartilhar localidade, ver localidade, abrir chat, etc
 * 
 * @author Jonathan Brilhante
 * @author Jose Rafael
 * @author Nata Venancio
 * @author Renato Almeida
 * 
 * @version 2.0
 */

public class MenuAmigos extends MenuTexto {
	private static final int OCULTAR = 1;
	private static final int COMPARTILHAR = 2;
	private static final int EXCLUIR = 3;
	private static final int CHAT = 4;
	private static final int VER = 5;
	private static final int VOLTAR = 6;

	private static final String AMIGOS = "1 - Ocultar" + SEP
			+ "2 - Compartilhar" + SEP + "3 -  Excluir" + SEP
			+ "5 - Ver localizacao" + SEP + "4 - Chat" + SEP + "5 - Voltar"
			+ SEP;

	private String login;

	/**
	 * Constroi o menu a partir de um usuario
	 * 
	 * @param login
	 *            o login usuario
	 */
	public MenuAmigos(String login) {
		this.login = login;
	}

	/**
	 * Metodo auxiliar para pegar um Amigo da lista de amigos do usuario
	 * 
	 * @param login
	 *            o login do amigo a buscar
	 * @param amigos
	 *            a lista de amigos
	 * @return o amigo
	 */
	private Relacionamento getAmigo(String login, List<Relacionamento> amigos) {
		for (Relacionamento a : amigos) {
			if (a.getAmigo().getLogin().equals(login)) {
				return a;
			}
		}
		return null;
	}

	public void executa() {
		FacadeNegocios facadeNegocios = FacadeNegocios.getInstance();
		Usuario usuario;
		try {
			usuario = facadeNegocios.buscaPorLogin(login);
		} catch (NaoEncontradoException e1) {
			System.err.println(e1.getMessage());
			return;
		}

		boolean controlador = true;

		List<Relacionamento> amigos;
		try {
			amigos = facadeNegocios.getAmigos(usuario.getLogin());
		} catch (SessaoInexistenteException e) {
			System.err.println(e.getMessage());
			return;
		}

		System.out.println("###### Amigos ######" + SEP);

		while (controlador) {
			System.out.println("Digite o login do amigo a gerenciar : ");
			Relacionamento amigo = getAmigo(entrada.leLinha(), amigos);

			if (amigo == null) {
				System.err.println("Amigo inexistente.");
				break;
			}

			System.out.println(SEP + AMIGOS);

			int escolha = getEntradaValida(OCULTAR, COMPARTILHAR);
			if (escolha == INVALIDA) {
				break;
			}

			switch (escolha) {
			case OCULTAR:
				amigo.ocultar();
				break;

			case COMPARTILHAR:
				amigo.compartilhar();
				break;

			case EXCLUIR:
				try {
					usuario.excluirAmigo(amigo.getAmigo());
				} catch (NaoEncontradoException e) {
					System.err.println(e.getMessage());
				}
				break;

			case VER:
				try {
					System.out.println(amigo.getLocalizacao());
				} catch (OcultoException e) {
					System.err.println(e.getMessage());
				} catch (LocalizacaoException e) {
					System.err.println(e.getMessage());
				}

			case CHAT:
				try {
					facadeNegocios.iniciarChat(usuario.getLogin(), amigo
							.getLogin());
				} catch (NaoEncontradoException e) {
					System.err.println(e.getMessage());
				}

			case VOLTAR:
				controlador = false;
				break;
			}
		}
	}
}